<?php
/**
 * Created by PhpStorm.
 * User: liu85
 * Date: 2018/7/12
 * Time: 21:51
 */

namespace app\common\helper;


use think\facade\Config;

class UserHelper
{
    /**
     * 生成密码
     * @param $str
     * @return string
     */
    public static function makePassword($str) {
        return md5($str.Config::get('PASS_KEY'));
    }

    /**
     * 检测密码格式
     * @param $password
     * @return bool|string
     */
    function checkPassword($password) {
        $len = strlen($password);
        if ($len < 6 || $len > 15) {
            return FALSE;
        }
        return true;
    }


    /**
     * 检测用户名
     * @param $username
     * @return bool|string
     */
    function checkUsername($username) {
        // 最小长度
        $minLength = 4;
        // 最大长度
        $maxLength = 20;
        // 用户名长度验证
        $len = strlen(iconv('utf-8', 'gb2312//IGNORE', $username)); # 中文最多 $maxLength/2 个字
        if ($len < $minLength || $len > $maxLength) {
            return '用户名长度错误';
        } elseif (preg_match('/[^\x80-\xffa-zA-Z0-9_]/', $username)) {
            return '用户名格式错误';     # 用户名含非法字符, 只能是 中文, 英文, 数字, 下划线
        }
        return true;
    }


    /**
     * 检测身份证是否合法
     * @param $idcard_base
     * @return bool|mixed
     */
    public static function idcard_verify_number($idcard_base){
        if (strlen($idcard_base) != 17){
            return false;
        }
        $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //debug 加权因子
        $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); //debug 校验码对应值
        $checksum = 0;
        for ($i = 0; $i < strlen($idcard_base); $i++){
            $checksum += substr($idcard_base, $i, 1) * $factor[$i];
        }
        $mod = $checksum % 11;
        $verify_number = $verify_number_list[$mod];
        return $verify_number;
    }


    /**
     * 检测身份证号码 18位
     * @param $idcard
     * @return boolean
     */
    public static function idcard_checksum18($idcard){
        if (strlen($idcard) != 18){ return false; }
        $idcard_base = substr($idcard, 0, 17);
        if (self::idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){
            return false;
        }else{
            return true;
        }
    }


    /**
     * 检测手机号
     * @param $str
     * @return boolean
     */
    public static function checkMobile($str) {
        $RegExp='/^(?:13|14|15|18|17)[0-9]{9}$/';
        if (preg_match($RegExp,$str)) {
            return true;
        }else{
            return false;
        }
    }

    /**
     * 检测真实姓名是否是中文
     * @param $name
     * @return bool
     */
    public static function checkRealName($name){
        if(!preg_match("[^\x80-\xff]",$name)){
            return true;
        }else{
            return false;
        }
    }
}